/**
 * Symbol:
 * 1、概念：Symbol表示独一无二的值，是js第七种数据类型。
 * 特点：
 * 1、Symbol的值是唯一的，用来解决命名冲突。
 * 2、不能与其他数据进行运算
 * 3、Symbol定义的对象属性不能用for...in循环便利，但是可以使用Reflect.ownKeys来获取对象所有键名。
 */
/**
* 1、symbol
*  一、不能与其他数据类型进行运算。
*  二、表示独一无二的值，最大的用法是用来定义对象的唯一属性名。
*/
const b = Symbol("a")
const c = Symbol("a")
console.log(b == c) //false

/**
 * 2、typeof
 */
const a = Symbol("时间简史")
console.log(a, typeof a) //Symbol(时间简史) "symbol"
/**
 * 3、Symbol.for()创建值
 */
const m = Symbol.for("时间简史")
const n = Symbol.for("时间简史")
console.log(m == n) //true

/**
 * 4、不能与其他数据进行运算，连同他自己也不能。
 **/
// console.log(m + n) //报错
const num = 12
// console.log(m + num) //报错
/**
 * 5、定义对象唯一属性名
 */
let methods = {
    up: Symbol(),
    down: Symbol()
}
let game = {
    name: "小游戏",
    up: function () {
        console.log("小游戏")
    },
    [Symbol('up')]: function () {
        console.log("小游戏")
    }
}

game[methods.down] = function () {
    console.log("小游戏")
}
console.log("game:", game)
console.log("game.up():", game.up)
console.log("game.down():", game.down)